/*
* task_scheduler.h
*
*  Created on: Jul 26, 2024
*      Author: vuxtvg@163.com
*/

#ifndef TASK_SCHEDULER_H_
#define TASK_SCHEDULER_H_

#include <stdint.h>
#include <stdlib.h>

#define EnableTask(taskFunc) SetTaskEnabled((taskFunc), 1)
#define DisableTask(taskFunc) SetTaskEnabled((taskFunc), 0)

// 定义任务结构体
typedef struct
{
        void (*pTaskFuncCb)(void);  // 函数指针变量，用来保存业务功能模块函数地址
        uint16_t timCount;          // 时间片计数值
        uint16_t timRload;          // 时间片重载值
        uint32_t run :1;            // 调度标志，1：调度，0：挂起
        uint32_t enabled :1;        // 任务启用标志，1：启用，0：禁用
        uint32_t runCount :30;      // 任务运行次数计数器
} TaskComps_t;

extern TaskComps_t g_taskComps[];
extern uint8_t TASK_NUM_MAX;

// 函数声明
void TaskInit(void);
void TaskHandler(void);
//void TaskScheduleCbReg(void (*pFunc)(void));
void TaskScheduleCb(void);
void SetTaskEnabled(void (*taskFunc)(void), uint8_t state);

uint32_t GetTaskRunCount(void (*taskFunc)(void));
void ExecuteOnMultiple(void (*taskFunc)(void), uint32_t multiple,
                void (*ActionFunc)(void));

void FreeHashTable(void);

#endif /* TASK_SCHEDULER_H_ */
